Revision: iterate--main--1.4--patch-1
Archive: iterate-devel@common-lisp.net--2004
Creator: Marco Baringer <mb@bese.it>
Date: Thu May  5 07:46:15 CEST 2005
Standard-date: 2005-05-05 05:46:15 GMT
Modified-files: doc/iter-man.tex iterate-test.lisp
    iterate.lisp package.lisp
New-patches: iterate-devel@common-lisp.net--2004/iterate--main--1.4--patch-1
Summary: Merge in all of "Hoehle, Joerg-Cyril" <Joerg-Cyril.Hoehle@t-systems.com> changes
Keywords: 

User visible changes:

o minor CL optimizations: consp, pop, export, declaim
o FOR IN-PACKAGE(S) evaluates package(s) argument
o GENERATE IN-PACKAGE(S) works
o GENERATE IN-HASHTABLE works
o FOR IN-HASHTABLE supports destructuring
o FOR IN-PACKAGES was broken because of 'pkgs
  symbol-types are not evaluated in with-package-iterator
  and must not be empty => consp
o (for vars DO-NEXT) now binds vars
o ALWAYS + NEVER work together
o FINDING SUCH-THAT may be used with ALWAYS/NEVER or THEREIS
o correctly report incompatible accumulation for FINDING SUCH THAT with
  other clauses, e.g. COLLECT
o use DSETQ instead of destructuring-bind for consistency of templates
o a few more package exports
o added many more testcases
o (DSETQ (values x nil y)) works
o restore v 1.0/2 special/macro order, e.g. change special-form? etc.
o in-vector/in-sequence downwards by 2 did not start with last element
  (iter (for i index-of-vector #(0 1 2 3 4) downto 0 by 2) (collect i))
  yielded (3 1), expect (4 2 0) by similarity with
  (iter (for i downfrom 4 by 2) (collect i)) and
  (iter (for i from 4 downto 0 by 2) (collect i))
o (if (next x) ...) works -- the test form is walked too
o the form in (count form) is walked, it may contain clauses
o accept symbol-macrolet
o accept macrolet, but signal warning about not walking its body
o iter::remove-clause works

* package.lisp: use declaim, use (export list): (export +clause-names+
  '#:iterate), export defsynonym defmacro-driver

* iterate.lisp: (declaim (declaration declare-variables)), listp ->
  consp, (prog1 (car body) (pop body)) -> (pop body), (code-char 0) is
  portable, #\nul or #\null is not, counting uses '(subst (var exp) #)
  instead of expr, bang-vars-1: tail-call optimized, for in-package(s)
  evaluates package(s) argument, for in-package(s) work as generators,
  use #:start/beginning to (hopefully) work with Allegro modern style,
  walk-flet: accepts declarations, remove walk-identity and use (x . nil)
  consistently in *special-form-alist*, ELSE special clause also needs
  local-binding-check, locally accepts [0..N] declarations, rename
  walk-locally to walk-cdr-with-declarations, constant? and
  self-evaluating? accept all self-evaluating forms, including, keywords
  and T/NIL, but no other symbols., avoid ~< pretty-printer (not in
  Cormanlisp) in error messages, leave that to the implementation,
  if-1st-time & special-clause ELSE: type 'boolean instead of symbol
  #+clisp "explicit declarations are always placed in the generated code"
  as the manual says, #+lispworks multiple-value-bind is recognized
  (again), make-next-code N <> 1 generates correct code, (collect i at
  'beginning) barfs, despite man says "may be quoted".  -> probably
  change manual: it's not evaluated, so don't quote Same for type: remove
  code Also here: "(As with ~place~, quoting ~type~ is optional.)"  Don't
  make people believe it could be evaluated!, allow better compiler
  optimizations by keeping macros like and, or, prog1 etc. in the
  expanded code.  The expansion also becomes more readable (closer to the
  source)., #+clisp support ((setf foo) new-value args...) function
  syntax, #+clisp simple support for handler-bind, not walking handlers,
  free-vars correctly handles locally, symbol-macrolet and declare, use
  macroexpand-1 only to ensure all special handlers get used, add
  walk-cddr-with-declarations for symbol-macrolet, use *print-pretty* for
  macrolet report (via clause-warning), do not let testsuite overwrite
  multiply clause, dsetq generates better expansion for single (the type
  var) template, explicit extract-var code is superfluous in FOR ... ON
  implementation, var-value-returned prefer (second (last (setq-form)
  3)), with-temporary is dangerous: fixed nested finding such-that bug

* iter-man.tex: drop note about future with-hashtable/package-iterator,
  document dsetq value, document else clause

* iterate-pg.lisp: use multiple-value-prog1
